package leetcode_day._2022._202210._1120;

/**
 * 1790. 仅执行一次字符串交换能否使两个字符串相等
 * 算法：模拟
 * 定义 a, b 用来存储 s1 和 s2 两处不一样的位置
 * 如果 a = -1, 表示 s1 和 s2 一样
 * 如果 a = -1 && b != -1, 表示 s1 和 s2 只有一处不一样, 返回 false
 * 如果 a = -1 && b = -1, 表示 s1 和 s2 有两处不一样
 *
 * @author yzh
 * @version 1.0
 * @date 2022/10/11 19:41
 */
public class _11_1790 {

    public boolean areAlmostEqual(String s1, String s2) {
        int len = s1.length(), a = -1, b = -1;
        for (int i = 0; i < len; i++) {
            if (s1.charAt(i) == s2.charAt(i)) continue;
            if (a == -1) a = i;
            else if (b == -1) b = i;
            else return false;
        }
        if (a == -1) return true;
        if (b == -1) return false;
        return s1.charAt(a) == s2.charAt(b) && s1.charAt(b) == s2.charAt(a);
    }

}
